<?php
/**
 * 对象在类的内部或者外部使用静态属性/方法
 * 
 * 对象在类的内部或者外部访问不存在的普通属性
 * 使用对象 在类的内部或外部使用静态属性
 * this::$staticProperty
 * $obj::$staticProperty
 * 静态属性不能在类的内部使用$this->staticProperty来访问
 * 
 * 使用对象 在类的内部或者外部使用静态方法
 * $obj->staticFunctionName();
 * $obj::staticFunctionName();
 * $this::stasticFunctionName();
 * $this->staticFunctionName();
 */
class User
{
    static $name = 'Li.si';
    static function getName()
    {
        echo self::$name. PHP_EOL;
    }
    
    //在对象内部调用静态方法
    function index()
    {
        self::getName();
        $this::getName();
        $this->getName();
    }
}


$ln = "<br/>\n";
$ln2 = str_repeat($ln, 2);

//在对象外部调用静态方法
echo '在对象外部调用静态方法', $ln;
$lisi = new User;
$lisi->getName();
$lisi::getName();
User::getName();
//User->getName();  //类名不能直接使用对象操作符号

echo $ln2;


echo '在类内部调用静态方法', $ln;
$lisi->index();
echo $ln2;

echo '在类外部调用静态属性', $ln;
echo ($lisi::$name);

echo $ln;
/**
 * 在类的外部访问静态属性，不能使用->
 * Notice: Accessing static property User::$name as non static
 * Notice: Undefined property: User::$name
 */ 
echo '在类的外部访问静态属性，不能使用-> $lisi->name', $ln;
echo ($lisi->name);  
echo $ln2;

echo '在类的外部访问普通属性  $lisi->$name', $ln;
echo ($lisi->$name);  
echo $ln2;



/**
 * 真实的访问一个不存在的属性
 * Notice: Undefined property: User::$height
 **/ 
echo ($lisi->height);


